<!-- Copyright (C) 2019-2021 Junruoyu Zheng. Home page: https://junruoyu-zheng.gitee.io/ligral

     Distributed under MIT license.
     See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-->
<!DOCTYPE html>
<html lang="en">
 <head>
  <title>
   术语定义
  </title>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"/>
  <!-- Main CSS -->
  <link href="/ligral/css/style.css" rel="stylesheet"/>
  <link href="/ligral/css/rolling.css" rel="stylesheet"/>
  <link href="/ligral/css/custom.css" rel="stylesheet"/>
  <link href="/ligral/css/katex.min.css" rel="stylesheet"/>
  <link href="/ligral/avatar.png" rel="shortcut icon" type="image/x-icon"/>
  <!-- Font Awesome -->
  <script crossorigin="anonymous" src="https://kit.fontawesome.com/14294c79e2.js">
  </script>
 </head>
 <body>
  <!-- Header -->
  <div class="header-wrap d-none d-md-block">
   <div class="container">
    <div class="row">
     <!-- Left header box -->
     <header class="col-6 text-left">
      <h1 class="letter-wrap title">
       Ligral
      </h1>
     </header>
    </div>
   </div>
  </div>
  <!-- Main navigation -->
  <nav class="navbar navbar-expand-md navbar-dark bg-primary">
   <div class="container">
    <!-- Company name shown on mobile -->
    <a class="navbar-brand d-md-none d-lg-none d-xl-none" href="#">
     Ligral
    </a>
    <!-- Mobile menu toggle -->
    <button aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler" data-target="#mainNavbar" data-toggle="collapse" type="button">
     <span class="navbar-toggler-icon">
     </span>
    </button>
    <!-- Main navigation items -->
    <div class="collapse navbar-collapse" id="mainNavbar">
     <ul class="navbar-nav mr-auto">
      <li class="nav-item">
       <a class="nav-link" href="/ligral/index.html">
        主页
        <span class="sr-only">
         (current)
        </span>
       </a>
      </li>
      <li class="nav-item dropdown active">
       <a aria-expanded="false" aria-haspopup="true" class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">
        文档
       </a>
       <div class="dropdown-menu navbar-dark bg-primary">
        <a class="dropdown-item" href="/ligral/quick-start.html">
         快速开始
        </a>
        <a class="dropdown-item" href="/ligral/user-guide">
         用户文档
        </a>
        <a class="dropdown-item" href="/ligral/dev-guide">
         开发文档
        </a>
        <a class="dropdown-item" href="/ligral/interface/">
         接口定义
        </a>
       </div>
      </li>
      <!-- <li class="nav-item">
                                <a class="nav-link" href="#">Services</a>
                        </li> -->
      <li class="nav-item">
       <a class="nav-link" href="/ligral/product.html">
        产品
       </a>
      </li>
      <li class="nav-item">
       <a class="nav-link" href="/ligral/contact.html">
        联系我们
       </a>
      </li>
     </ul>
     <!-- <form class="form-inline header-search-form my-2 my-lg-0">
                        <input class="form-control mr-sm-2" type="text" size="10"  placeholder="Search" aria-label="Search">
                        <button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button>
                    </form> -->
    </div>
   </div>
  </nav>
  <!-- Jumbtron / Slider -->
  <!-- Main content area -->
  <main class="container">
   <div class="row" style="flex-direction: row-reverse;">
    <!-- Main content -->
    <div class="col-sm-8">
     <article>
      <h1>
       术语定义
      </h1>
      <p>
       本节介绍了 ligral 的一些术语及其定义，避免文档中出现含义不清的表述，让用户能更好地阅读文档，在遇到问题时能清楚地、规范地表达和搜索信息。
      </p>
      <h3>
       Ligral
      </h3>
      <p>
       Ligral 是一种语言，用文本的形式描述一个仿真模型，等效于一个仿真框图。同时，ligral 也指代 ligral 语言的官方解释器/编译器，是一个程序，可以在终端中调用 ligral 程序，解析 ligral 语言。
      </p>
      <p>
       用 ligral 语言编写仿真模型，得到的文件称之为 lig 文件，其后缀名为 lig。
      </p>
      <h3>
       框图 Block diagram
      </h3>
      <p>
       框图是表示一个系统各部分之间关系的图示。在 ligral 语言中，各部分指的是是具有特定功能的计算单元，接收一定量的输入，计算一定量的输出或者产生某些外部性影响。各部分之间的关系，指的是输入输出之间的对应关系。很显然，每一个输入对应一个输出，而每一个输出对应零个或多个输入，输入和输入、输出和输出之间不存在对应关系。每一对对应关系总是从输出到输入，是有向的，因此可以用箭头表示。
      </p>
      <h3>
       模块 Model
      </h3>
      <p>
       在 ligral 语言中，模块代表着最小的计算单元。模块要么是 ligral 程序提供的，要么是扩展包提供的，但不是由 ligral 语言编写的。
      </p>
      <h3>
       端口 Port
      </h3>
      <p>
       模块的每个输入或输出都称之为端口，分别为输入端口和输出端口。
      </p>
      <h3>
       模块链 Chain
      </h3>
      <p>
       如果有大于一个模块按照某种特定的顺序排列，使之恰好前后的输出、输入端口互相匹配且连接，并将第一个模块的输入端口和最后一个模块的输出端口暴露出来，所形成的结构称之为模块链。单个模块也可视作一种特殊的模块链。
      </p>
      <h3>
       模块组 Group
      </h3>
      <p>
       大于等于一个模块链并联而成的结构称之为模块组。所有模块链的全部输入端口为模块组的输入端口，所有模块链的全部输出端口为模块组的输出端口。
      </p>
      <h3>
       路由 Route
      </h3>
      <p>
       一种特殊的模块组，规定输入端口仅能为一种特殊的模块
       <code>
        Input
       </code>
       的输入端口，输出端口仅能为另一种特殊的模块
       <code>
        Output
       </code>
       的输出端口。每个路由都是一个类型，其规定了输入输出端口的数量和名字、内部模块的连接方式，提供了一个内部的符号表，拥有一个可配置的参数列表。
      </p>
      <p>
       每个路由都可以声明任意个不同的实例，这些实例的输入输出端口的数量和名字、内部模块的连接方式都是一致的，但是根据初始化时的参数配置不同可能拥有不同的逻辑。在初始化的时候会生成闭包，内部符号表不可从外部访问，但是可以从内部向外部访问。每个实例都是不同的，因为每个实例都有自己的闭包。
      </p>
      <p>
       模块链、模块组和路由都是计算单元，它们都是由 ligral 语言编写的。路由最大的特点就在于它是可复用的，声明一个路由类型后，可以进行多次实例化而不会互相干扰。模块链和模块组都是临时声明临时使用的。
      </p>
      <h3>
       节点 Node
      </h3>
      <p>
       模块和路由在形式上具有相似性，都可以声明实例、传入参数等。路由能实现和模块同样的功能（路由内部包含这个模块就能实现这个模块的功能），也可以把路由用模块改写，实现更高效地计算。在用户角度，很难感受到两者的细微差别，就好像一个编译器内置的函数和由模块提供的函数一样。因此，这两者可以统称为节点，这里的结点是相对于整个框图结构而言的。
      </p>
      <p>
       但是需要注意的是，在 ligral 中有一个模块是空节点，其名称也是
       <code>
        Node
       </code>
       ，此节点不包含任何计算逻辑，纯粹只是实现了数据暂存和转发的功能。
      </p>
      <p>
       在有了节点这个概念后，模块链这一概念可以扩展成“节点链”，模块组可以扩展成“节点组”，对应的逻辑及英文名称没有变。甚至模块链和模块组的元素还可以是一个子模块链或者子模块组，具体请参见
       <a href="link">
        节点连接
       </a>
       。
      </p>
      <h3>
       接口 Interface
      </h3>
      <p>
       在 ligral 中，接口这一概念和端口有类似之处，即不同模块之间通信的通道。从底层实现的层面看，所有的端口发送或接收的数据都是标量或者矩阵（日后可能会统一成矩阵，即视标量为
       <span class="katex">
        <span class="katex-mathml">
         <math xmlns="http://www.w3.org/1998/Math/MathML">
          <semantics>
           <mrow>
            <mn>
             1
            </mn>
            <mo>
             ×
            </mo>
            <mn>
             1
            </mn>
           </mrow>
           <annotation encoding="application/x-tex">
            1 \times 1
           </annotation>
          </semantics>
         </math>
        </span>
        <span aria-hidden="true" class="katex-html">
         <span class="base">
          <span class="strut" style="height:0.72777em;vertical-align:-0.08333em;">
          </span>
          <span class="mord">
           1
          </span>
          <span class="mspace" style="margin-right:0.2222222222222222em;">
          </span>
          <span class="mbin">
           ×
          </span>
          <span class="mspace" style="margin-right:0.2222222222222222em;">
          </span>
         </span>
         <span class="base">
          <span class="strut" style="height:0.64444em;vertical-align:0em;">
          </span>
          <span class="mord">
           1
          </span>
         </span>
        </span>
       </span>
       的矩阵），没有区别。但是从上层应用的角度看，每一个节点的不同端口都有其特定的含义，这些端口被其所属的节点、在节点钟的顺序或标识符所区分。比如在一个控制工程中，被控对象输出的状态
       <code>
        x
       </code>
       端口，应当连接到控制器的状态输入端口
       <code>
        x
       </code>
       ，如果连接到控制器的参考值输入端口，就没有意义了。
      </p>
      <p>
       因此，接口是被其所属的节点以及在节点钟的顺序或标识符赋予了特定含义的端口。
      </p>
      <h3>
       签名 Signature
      </h3>
      <p>
       签名是一组接口的集合，它规定了一个声明了这个签名的节点所有的接口以及它们的顺序。换言之，签名是一组具有特定顺序的接口，声明了改签名的节点必须具备和签名完全一致的接口。
      </p>
     </article>
    </div>
    <!-- Sidebar -->
    <aside class="col-sm-4">
     <div class="sidebar-box">
      <h4>
       目录
      </h4>
      <div class="list-group list-group-root">
       <a class="list-group-item" href="/ligral/quick-start.html">
        快速开始
       </a>
       <a class="list-group-item" href="/ligral/user-guide/index.html">
        用户文档
       </a>
       <div class="list-group">
        <a class="list-group-item active" href="/ligral/user-guide/terms.html">
         术语定义
        </a>
        <a class="list-group-item" href="/ligral/user-guide/config.html">
         设置语句
        </a>
        <a class="list-group-item" href="/ligral/user-guide/const.html">
         声明常量
        </a>
        <a class="list-group-item" href="/ligral/user-guide/node.html">
         声明节点
        </a>
        <a class="list-group-item" href="/ligral/user-guide/link.html">
         节点连接
        </a>
        <a class="list-group-item" href="/ligral/user-guide/matrix.html">
         矩阵运算
        </a>
        <a class="list-group-item" href="/ligral/user-guide/route.html">
         路由类型
        </a>
        <a class="list-group-item" href="/ligral/user-guide/signature.html">
         接口签名
        </a>
        <a class="list-group-item" href="/ligral/user-guide/import.html">
         引用依赖
        </a>
       </div>
       <a class="list-group-item" href="/ligral/dev-guide/index.html">
        开发文档
       </a>
       <div class="list-group">
        <a class="list-group-item" href="/ligral/dev-guide/syntax.html">
         语法设计
        </a>
        <a class="list-group-item" href="/ligral/dev-guide/interpreter.html">
         解释器
        </a>
        <a class="list-group-item" href="/ligral/dev-guide/component.html">
         模块组件
        </a>
        <a class="list-group-item" href="/ligral/dev-guide/simulation.html">
         问题抽象
        </a>
        <a class="list-group-item" href="/ligral/dev-guide/tools.html">
         工具箱
        </a>
       </div>
       <a class="list-group-item" href="/ligral/interface/index.html">
        接口定义
       </a>
       <div class="list-group">
        <a class="list-group-item" href="/ligral/interface/model.html">
         模块接口
        </a>
        <a class="list-group-item" href="/ligral/interface/protocol.html">
         数据接口
        </a>
       </div>
      </div>
     </div>
     <div class="sidebar-box sidebar-box-bg">
      <h4>
       关于我们
      </h4>
      <p>
       我们是一群有志于突破工业软件封锁、具有开源精神的开发者。本项目旨在替代 Simulink 进行仿真，通过与框图等效的文本语言描述仿真对象，并解释/编译而后求解。
       <a class="readmore" href="https://gitee.com/junruoyu-zheng/ligral/wikis" target="_blank">
        更多 »
       </a>
      </p>
     </div>
     <div class="sidebar-box">
      <h4>
       仓库链接
      </h4>
      <ul>
       <li>
        <a href="https://gitee.com/junruoyu-zheng/ligral" target="_blank" title="Gitee">
         Gitee 仓库
        </a>
       </li>
       <li>
        <a href="https://github.com/JRY-Zheng/ligral" target="_blank" title="GitHub">
         GitHub 仓库
        </a>
       </li>
      </ul>
     </div>
    </aside>
   </div>
  </main>
  <!-- Footer -->
  <footer class="footer">
   <div class="footer-lists">
    <div class="container">
     <div class="row">
      <div class="col-sm">
       <ul>
        <li>
         <h4>
          联系我们
         </h4>
        </li>
        <li>
         <a href="mailto:zhengjry@outlook.com">
          给我们发邮件
         </a>
        </li>
        <li>
         <a href="https://www.zhihu.com/people/LostFish" target="_blank">
          来知乎关注我
         </a>
        </li>
        <li>
         <a href="https://web.okjike.com/u/105ad022-f646-48c0-8236-6007ee5179c5" target="_blank">
          来即刻关注我
         </a>
        </li>
       </ul>
      </div>
      <div class="col-sm">
       <ul>
        <li>
         <h4>
          代码仓库
         </h4>
        </li>
        <li>
         <a href="https://gitee.com/junruoyu-zheng/ligral" target="_blank">
          Gitee 仓库
         </a>
        </li>
        <li>
         <a href="https://github.com/JRY-Zheng/ligral" target="_blank">
          GitHub 仓库
         </a>
        </li>
       </ul>
      </div>
      <div class="col-sm">
       <ul>
        <li>
         <h4>
          合作伙伴
         </h4>
        </li>
        <li>
         <a href="http://pyminer.com" target="_blank">
          PyMiner 官网
         </a>
        </li>
        <li>
         <a href="https://gitee.com/py2cn/pyminer" target="_blank">
          PyMiner 仓库地址
         </a>
        </li>
       </ul>
      </div>
      <div class="col-sm">
       <h4>
        致谢
       </h4>
       <p>
        Ligral 的开发得到了很多帮助，特在此致谢！感谢我的单位对创新的鼓励；感谢我的导师 James 对数值积分的指导；感谢 Gitee 对项目的支持，在刚开源不久就为我推荐；感谢 PyMiner 开发团队对我的鼓励和支持！
       </p>
       <p class="social-icons">
        <a href="https://gitee.com/junruoyu-zheng/ligral/stargazers" style="text-decoration: none;" target="_blank">
         <img alt="star" src="https://gitee.com/junruoyu-zheng/ligral/badge/star.svg?theme=dark"/>
        </a>
        <a href="https://www.zhihu.com/people/LostFish" target="_blank">
         <i class="fab fa-zhihu fa-2x zhihu-icon">
         </i>
        </a>
       </p>
      </div>
     </div>
    </div>
   </div>
   <div class="footer-bottom">
    <p class="text-center">
     Copyright © 2021. Ligral All rights reserved. 梨果科技版权所有 © 2021
    </p>
    <p class="text-center">
     <a href="#">
      <i class="fa fa-arrow-up">
      </i>
      回到顶部
     </a>
    </p>
   </div>
  </footer>
  <!-- Bootcamp JavaScript -->
  <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  <script src="/ligral/js/jquery-3.2.1.slim.min.js">
  </script>
  <script src="/ligral/js/popper.min.js">
  </script>
  <script src="/ligral/js/bootstrap.min.js">
  </script>
  <script src="/ligral/js/TweenMax.min.js">
  </script>
  <script src="/ligral/js/rolling.js">
  </script>
 </body>
</html>